#include <asm/desc.h>
#include <asm/i387.h>
#include <asm/paging.h>
+#include <asm/e820.h>
#include <public/version.h>
#include <public/libelf.h>
if ( eax & IA32_FEATURE_CONTROL_MSR_LOCK )
{
- if ( !(eax & IA32_FEATURE_CONTROL_MSR_ENABLE_VMXON) )
+ if ( !(eax & (IA32_FEATURE_CONTROL_MSR_ENABLE_VMXON_OUTSIDE_SMX |
+ IA32_FEATURE_CONTROL_MSR_ENABLE_VMXON_INSIDE_SMX)) )
{
- printk("CPU%d: VMX disabled\n", cpu);
+ printk("CPU%d: VMX disabled by BIOS.\n", cpu);
return 0;
}
}
else
{
- wrmsr(IA32_FEATURE_CONTROL_MSR,
- IA32_FEATURE_CONTROL_MSR_LOCK |
- IA32_FEATURE_CONTROL_MSR_ENABLE_VMXON, 0);
+ eax = (IA32_FEATURE_CONTROL_MSR_LOCK |
+ IA32_FEATURE_CONTROL_MSR_ENABLE_VMXON_OUTSIDE_SMX |
+ IA32_FEATURE_CONTROL_MSR_ENABLE_VMXON_INSIDE_SMX);
+ wrmsr(IA32_FEATURE_CONTROL_MSR, eax, 0);
}
vmx_init_vmcs_config();
#define X86_FEATURE_MWAIT (4*32+ 3) /* Monitor/Mwait support */
#define X86_FEATURE_DSCPL (4*32+ 4) /* CPL Qualified Debug Store */
#define X86_FEATURE_VMXE (4*32+ 5) /* Virtual Machine Extensions */
+#define X86_FEATURE_SMXE (4*32+ 6) /* Safer Mode Extensions */
#define X86_FEATURE_EST (4*32+ 7) /* Enhanced SpeedStep */
#define X86_FEATURE_TM2 (4*32+ 8) /* Thermal Monitor 2 */
#define X86_FEATURE_CID (4*32+10) /* Context ID */
#define MSR_IA32_VMX_CR4_FIXED1 0x489
#define MSR_IA32_VMX_PROCBASED_CTLS2 0x48b
#define IA32_FEATURE_CONTROL_MSR 0x3a
-#define IA32_FEATURE_CONTROL_MSR_LOCK 0x1
-#define IA32_FEATURE_CONTROL_MSR_ENABLE_VMXON 0x4
+#define IA32_FEATURE_CONTROL_MSR_LOCK 0x0001
+#define IA32_FEATURE_CONTROL_MSR_ENABLE_VMXON_INSIDE_SMX 0x0002
+#define IA32_FEATURE_CONTROL_MSR_ENABLE_VMXON_OUTSIDE_SMX 0x0004
+#define IA32_FEATURE_CONTROL_MSR_SENTER_PARAM_CTL 0x7f00
+#define IA32_FEATURE_CONTROL_MSR_ENABLE_SENTER 0x8000
/* AMD/K8 specific MSRs */
#define MSR_EFER 0xc0000080 /* extended feature register */
#define X86_CR4_OSFXSR 0x0200 /* enable fast FPU save and restore */
#define X86_CR4_OSXMMEXCPT 0x0400 /* enable unmasked SSE exceptions */
#define X86_CR4_VMXE 0x2000 /* enable VMX */
+#define X86_CR4_SMXE 0x4000 /* enable SMX */
/*
* Trap/fault mnemonics.